파일 검사(현재 디렉토리에)-e 파일명 #파일 존재하면 참
-d 파일명 #파일이 디렉토리면 참
-h 파일명 #심볼릭 링크파일이면 참(소프트 링크)
-f 파일명 #파일이 일반 파일이면 참
-r 파일명 #파일이 읽기 가능이면 참
-s 파일명 #파일 크기가 0이 아니면 참
-u 파일명 #파일이 set-user-id 설정이면 참
-w 파일명 #파일이 쓰기 가능 상태이면 참
-x 파일명 #파일이 실행 가능 상태이면 참
if3.s
if [ -e $1 ]
then
echo "file exist"
exit
fi
echo "file not exist"
논리 연산조건1 -a 조건2 # AND
조건1 -o 조건2 # OR
조건1 && 조건2 # 양쪽 다 성립(AND)
조건1 || 조건2 # 한쪽 또는 양쪽다 성립(OR)
!조건 #조건이 성립하지 않음
true #조건이 언제나 성립
false #조건이 언제나 성립하지 않음
조건문 if/else
if [ 조건 ]
then
명령문
else
명령문
fi
ifelse.sh
if [ $1 -eq $2 ]
then
echo "Same Value"
else
echo "Different Value"
fi
celina@ubuntuserver:~/celina/shell$ ./ifelse.sh 1 2
Different Value
명령 해석ping -c 1 192.168.0.1 1>/dev/null
0: 표준 입력, 1: 표준 출력, 2: 표준 에러
- 1> /dev/null: 표준 출력 내용을 버림(출력x)
-c 1 한번만 체크
ping.sh
ping -c 1 192.168.0.1 1>/dev/null
if [ $? -eq 0 ]
then
echo "게이트웨이 핑 성공"
else
echo "게이트웨이 핑 실패"
fi
celina@ubuntuserver:~/celina/shell$ ./ping.sh
게이트웨이 핑 실패
조건문 한줄에 작성하기(참고)
if [ -z $1 ]; then echo “Insert arguments”; fi
if [ 뒤와 ] 앞에는 공백이 있어야 한다.
[] 에서 &&, ||, <, > 연산자들이 에러가 나는 경우 [[]]를 사용하면 정상작동하는 경우도 있음
반복문(for)
기본 for 구문
for 변수 in 변수값1, 변수값2 ...
do
명령문
done
for.sh
for database in $(ls)
do
echo $database
done
celina@ubuntuserver:~/celina/shell$ ./for.sh
for.sh
hello.sh
if.sh
ifelse.sh
list.sh
notes.sh
ping.sh
shell.sh
sum.sh
variables.sh
한줄로 아래와 같이 쓸 수 있다.
for database in $(ls); do echo $database; done
반복문(while)
while [ 조건문 ]
do
명령문
done
while.sh
lists=$(ls)
num=${#lists[@]}
index=0
while [ $num -ge 0 ]
do
echo ${lists[$index]}
index=`expr $index + 1`
num=`expr $num - 1`
done
for.sh for2.sh hello.sh if.sh ifelse.sh list.sh notes.sh ping.sh shell.sh sum.sh variables.sh while.sh
변수 타입 지정(Variable Revisited)
Bash 변수는 타입을 구분하지 않고 기본적으로 문자열이다.
문맥에 따라서 연산 처리한다.
declare, typeset을 이용해서 타입 지정할 수 있다.(두개는 동일)
declare -r string_variable
declare -i number_variable=10
declare -a array_variable
declare -x export_variable="hello world"
declare -f
declare -f 함수이름